import { IPSCodeList } from '../../codelist/ipscode-list';
import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSDEFGroup } from '../defield/ipsdefgroup';
import { IPSDEField } from '../defield/ipsdefield';
import { IPSDERAggData } from '../der/ipsderagg-data';
import { IPSDEDataQuery } from './ipsdedata-query';
import { IPSDEDataSetGroupParam } from './ipsdedata-set-group-param';
import { IPSDEDataSetInput } from './ipsdedata-set-input';
import { IPSDEDataSetParam } from './ipsdedata-set-param';
import { IPSDEDataSetReturn } from './ipsdedata-set-return';
import { IPSDELogic } from '../logic/ipsdelogic';
import { IPSDEOPPriv } from '../priv/ipsdeoppriv';
import { IPSSysPFPlugin } from '../../res/ipssys-pfplugin';
import { IPSSysSFPlugin } from '../../res/ipssys-sfplugin';
import { IPSSysUserDR } from '../../security/ipssys-user-dr';
import { IPSSubSysServiceAPIDEMethod } from '../../service/ipssub-sys-service-apidemethod';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEDataSet
 */
export interface IPSDEDataSet extends IPSDataEntityObject {
  /**
   * 行为持有者
   * @description 值模式 [逻辑所有者] {1：后台、 2：前台、 3：后台及前台 }
   * @type {( number | 1 | 2 | 3)}
   * @default 3
   */
  actionHolder: number | 1 | 2 | 3;

  /**
   * 当前数据转换逻辑
   *
   * @type {IPSDELogic}
   */
  getActiveDataPSDELogic(): IPSDELogic | null;

  /**
   * 当前数据转换逻辑
   *
   * @type {IPSDELogic}
   */
  get activeDataPSDELogic(): IPSDELogic | null;

  /**
   * 当前数据转换逻辑（必须存在）
   *
   * @type {IPSDELogic}
   */
  getActiveDataPSDELogicMust(): IPSDELogic;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 数据集标记
   * @type {string}
   */
  dataSetTag: string;

  /**
   * 数据集标记2
   * @type {string}
   */
  dataSetTag2: string;

  /**
   * 数据集标记3
   * @type {string}
   */
  dataSetTag3: string;

  /**
   * 数据集标记4
   * @type {string}
   */
  dataSetTag4: string;

  /**
   * 结果集类型
   * @description 值模式 [实体数据集类型] {DATAQUERY：数据查询、 INDEXDE：索引实体、 MULTIFORM：多表单、 CODELIST：代码表、 DELOGIC：实体逻辑、 SCRIPT：脚本代码、 REMOTE：远程接口数据集 }
   * @type {( string | 'DATAQUERY' | 'INDEXDE' | 'MULTIFORM' | 'CODELIST' | 'DELOGIC' | 'SCRIPT' | 'REMOTE')}
   * @default DATAQUERY
   */
  dataSetType: string | 'DATAQUERY' | 'INDEXDE' | 'MULTIFORM' | 'CODELIST' | 'DELOGIC' | 'SCRIPT' | 'REMOTE';

  /**
   * 子系统扩展
   * @description 值模式 [实体扩展模式] {0：无扩展、 2：子系统功能扩展 }
   * @type {( number | 0 | 2)}
   * @default 0
   */
  extendMode: number | 0 | 2;

  /**
   * 分组模式
   * @description 值模式 [实体数据集分组模式] {0：无、 1：指定分组参数、 2：指定聚合关系 }
   * @type {( number | 0 | 1 | 2)}
   * @default 0
   */
  groupMode: number | 0 | 1 | 2;

  /**
   * 逻辑名称
   * @type {string}
   */
  logicName: string;

  /**
   * 默认主排序方向
   * @description 值模式 [字段排序方向] {ASC：升序、 DESC：降序 }
   * @type {( string | 'ASC' | 'DESC')}
   */
  majorSortDir: string | 'ASC' | 'DESC';

  /**
   * 默认主排序属性
   *
   * @type {IPSDEField}
   */
  getMajorSortPSDEField(): IPSDEField | null;

  /**
   * 默认主排序属性
   *
   * @type {IPSDEField}
   */
  get majorSortPSDEField(): IPSDEField | null;

  /**
   * 默认主排序属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getMajorSortPSDEFieldMust(): IPSDEField;

  /**
   * 默认从排序方向
   * @description 值模式 [字段排序方向] {ASC：升序、 DESC：降序 }
   * @type {( string | 'ASC' | 'DESC')}
   */
  minorSortDir: string | 'ASC' | 'DESC';

  /**
   * 默认从排序属性
   *
   * @type {IPSDEField}
   */
  getMinorSortPSDEField(): IPSDEField | null;

  /**
   * 默认从排序属性
   *
   * @type {IPSDEField}
   */
  get minorSortPSDEField(): IPSDEField | null;

  /**
   * 默认从排序属性（必须存在）
   *
   * @type {IPSDEField}
   */
  getMinorSortPSDEFieldMust(): IPSDEField;

  /**
   * 性能优化预警时长（ms）
   * @type {number}
   * @default -1
   */
  pOTime: number;

  /**
   * 代码表对象
   *
   * @type {IPSCodeList}
   */
  getPSCodeList(): IPSCodeList | null;

  /**
   * 代码表对象
   *
   * @type {IPSCodeList}
   */
  get psCodeList(): IPSCodeList | null;

  /**
   * 代码表对象（必须存在）
   *
   * @type {IPSCodeList}
   */
  getPSCodeListMust(): IPSCodeList;

  /**
   * 数据集查询集合
   *
   * @type {IPSDEDataQuery[]}
   */
  getPSDEDataQueries(): IPSDEDataQuery[] | null;

  /**
   * 数据集查询集合
   *
   * @type {IPSDEDataQuery[]}
   */
  get psDEDataQueries(): IPSDEDataQuery[] | null;

  findPSDEDataQuery(objKey: any): IPSDEDataQuery | null;

  /**
   * 数据集分组参数集合
   *
   * @type {IPSDEDataSetGroupParam[]}
   */
  getPSDEDataSetGroupParams(): IPSDEDataSetGroupParam[] | null;

  /**
   * 数据集分组参数集合
   *
   * @type {IPSDEDataSetGroupParam[]}
   */
  get psDEDataSetGroupParams(): IPSDEDataSetGroupParam[] | null;

  findPSDEDataSetGroupParam(objKey: any): IPSDEDataSetGroupParam | null;

  /**
   * 调用输入对象
   *
   * @type {IPSDEDataSetInput}
   */
  getPSDEDataSetInput(): IPSDEDataSetInput | null;

  /**
   * 调用输入对象
   *
   * @type {IPSDEDataSetInput}
   */
  get psDEDataSetInput(): IPSDEDataSetInput | null;

  /**
   * 调用输入对象（必须存在）
   *
   * @type {IPSDEDataSetInput}
   */
  getPSDEDataSetInputMust(): IPSDEDataSetInput;

  /**
   * 数据集参数集合
   *
   * @type {IPSDEDataSetParam[]}
   */
  getPSDEDataSetParams(): IPSDEDataSetParam[] | null;

  /**
   * 数据集参数集合
   *
   * @type {IPSDEDataSetParam[]}
   */
  get psDEDataSetParams(): IPSDEDataSetParam[] | null;

  findPSDEDataSetParam(objKey: any): IPSDEDataSetParam | null;

  /**
   * 调用返回对象
   *
   * @type {IPSDEDataSetReturn}
   */
  getPSDEDataSetReturn(): IPSDEDataSetReturn | null;

  /**
   * 调用返回对象
   *
   * @type {IPSDEDataSetReturn}
   */
  get psDEDataSetReturn(): IPSDEDataSetReturn | null;

  /**
   * 调用返回对象（必须存在）
   *
   * @type {IPSDEDataSetReturn}
   */
  getPSDEDataSetReturnMust(): IPSDEDataSetReturn;

  /**
   * 属性组对象
   *
   * @type {IPSDEFGroup}
   */
  getPSDEFGroup(): IPSDEFGroup | null;

  /**
   * 属性组对象
   *
   * @type {IPSDEFGroup}
   */
  get psDEFGroup(): IPSDEFGroup | null;

  /**
   * 属性组对象（必须存在）
   *
   * @type {IPSDEFGroup}
   */
  getPSDEFGroupMust(): IPSDEFGroup;

  /**
   * 实体处理逻辑
   *
   * @type {IPSDELogic}
   */
  getPSDELogic(): IPSDELogic | null;

  /**
   * 实体处理逻辑
   *
   * @type {IPSDELogic}
   */
  get psDELogic(): IPSDELogic | null;

  /**
   * 实体处理逻辑（必须存在）
   *
   * @type {IPSDELogic}
   */
  getPSDELogicMust(): IPSDELogic;

  /**
   * 服务访问操作标识
   *
   * @type {IPSDEOPPriv}
   */
  getPSDEOPPriv(): IPSDEOPPriv | null;

  /**
   * 服务访问操作标识
   *
   * @type {IPSDEOPPriv}
   */
  get psDEOPPriv(): IPSDEOPPriv | null;

  /**
   * 服务访问操作标识（必须存在）
   *
   * @type {IPSDEOPPriv}
   */
  getPSDEOPPrivMust(): IPSDEOPPriv;

  /**
   * 聚合数据关系
   *
   * @type {IPSDERAggData}
   */
  getPSDERAggData(): IPSDERAggData | null;

  /**
   * 聚合数据关系
   *
   * @type {IPSDERAggData}
   */
  get psDERAggData(): IPSDERAggData | null;

  /**
   * 聚合数据关系（必须存在）
   *
   * @type {IPSDERAggData}
   */
  getPSDERAggDataMust(): IPSDERAggData;

  /**
   * 子系统实体接口方法
   *
   * @type {IPSSubSysServiceAPIDEMethod}
   */
  getPSSubSysServiceAPIDEMethod(): IPSSubSysServiceAPIDEMethod | null;

  /**
   * 子系统实体接口方法
   *
   * @type {IPSSubSysServiceAPIDEMethod}
   */
  get psSubSysServiceAPIDEMethod(): IPSSubSysServiceAPIDEMethod | null;

  /**
   * 子系统实体接口方法（必须存在）
   *
   * @type {IPSSubSysServiceAPIDEMethod}
   */
  getPSSubSysServiceAPIDEMethodMust(): IPSSubSysServiceAPIDEMethod;

  /**
   * 前端扩展插件
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端扩展插件
   *
   * @type {IPSSysPFPlugin}
   */
  get psSysPFPlugin(): IPSSysPFPlugin | null;

  /**
   * 前端扩展插件（必须存在）
   *
   * @type {IPSSysPFPlugin}
   */
  getPSSysPFPluginMust(): IPSSysPFPlugin;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后端扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 用户数据范围对象
   *
   * @type {IPSSysUserDR}
   */
  getPSSysUserDR(): IPSSysUserDR | null;

  /**
   * 用户数据范围对象
   *
   * @type {IPSSysUserDR}
   */
  get psSysUserDR(): IPSSysUserDR | null;

  /**
   * 用户数据范围对象（必须存在）
   *
   * @type {IPSSysUserDR}
   */
  getPSSysUserDRMust(): IPSSysUserDR;

  /**
   * 用户数据范围对象2
   *
   * @type {IPSSysUserDR}
   */
  getPSSysUserDR2(): IPSSysUserDR | null;

  /**
   * 用户数据范围对象2
   *
   * @type {IPSSysUserDR}
   */
  get psSysUserDR2(): IPSSysUserDR | null;

  /**
   * 用户数据范围对象2（必须存在）
   *
   * @type {IPSSysUserDR}
   */
  getPSSysUserDR2Must(): IPSSysUserDR;

  /**
   * 默认分页大小
   * @type {number}
   * @default -1
   */
  pageSize: number;

  /**
   * 数据集参数模式
   * @description 值模式 [实体数据集参数模式] {1：默认参数（设置指定参数项值）、 2：指定参数 }
   * @type {( number | 1 | 2)}
   * @default 1
   */
  paramMode: number | 1 | 2;

  /**
   * 预定义类型
   * @description 值模式 [云实体结果集合预定义类型] {CODELIST：代码表、 INDEXDE：索引实体、 MULTIFORM：多表单、 DELOGIC：实体处理逻辑、 SCRIPT：脚本代码、 REMOTE：远程接口数据集 }
   * @type {( string | 'CODELIST' | 'INDEXDE' | 'MULTIFORM' | 'DELOGIC' | 'SCRIPT' | 'REMOTE')}
   */
  predefinedType: string | 'CODELIST' | 'INDEXDE' | 'MULTIFORM' | 'DELOGIC' | 'SCRIPT' | 'REMOTE';

  /**
   * 脚本代码
   * @type {string}
   */
  scriptCode: string;

  /**
   * 选择列级别
   * @description 值模式 [实体属性视图列级别（带属性组）（带-1）] {-1：默认（全部查询列）、 0：全部数据、 1：2级（无行外数据）、 2：3级（关键数据）、 3：4级（个别字段）、 100：指定属性组 }
   * @type {( number | -1 | 0 | 1 | 2 | 3 | 100)}
   * @default -1
   */
  viewLevel: number | -1 | 0 | 1 | 2 | 3 | 100;

  /**
   * 自定义数据集参数
   * @type {boolean}
   * @default false
   */
  customParam: boolean;

  /**
   * 实体默认数据集
   * @type {boolean}
   * @default false
   */
  defaultMode: boolean;

  /**
   * 启用访问审计
   * @type {boolean}
   * @default false
   */
  enableAudit: boolean;

  /**
   * 支持后台执行
   * @type {boolean}
   */
  enableBackend: boolean;

  /**
   * 支持前台执行
   * @type {boolean}
   */
  enableFront: boolean;

  /**
   * 支持临时数据
   * @type {boolean}
   * @default false
   */
  enableTempData: boolean;

  /**
   * 启用
   * @type {boolean}
   * @default true
   */
  valid: boolean;
}
